package com.atguigu.my.chapter02

/**
 *
 * @description: xxx
 * @time: 2020-05-22 13:33
 * @author: baojinlong 
 **/
object UnitDemo {
  def main(args: Array[String]): Unit = {
    test { // 此处的代码块不会马上被调用
      println("when evaluated")
      println("bb")
    }

    test(
      println("hello")
    )
    println("===========hello=====")
    test1 { //此代码块，传入后立即执行。
      println("when evaluated")
      () => {
        println("bb")
      }
    }
    test1(
      () => {
        println("hello")
        println("hello")
      }
    )

    println("----------")
    val function: () => Nothing = myException _
    println(function.toString)

  }

  /**
   * 传入的如果是多行代码块则必须要用{},如果就一行则可以用括号
   *
   * @param code
   */
  def test(code: => Unit): Unit = {
    println("start")
    code // 这行才会调用传入的代码块，写成code()亦可
    println("end")
  }

  /**
   * 这个是调用正常的方法,传入的是函数
   *
   * @param code
   */
  def test1(code: () => Unit): Unit = {
    println("start")
    code() // 要想调用传入的代码块，必须写成code()，否则不会调用。
    println("end")
  }

  def mySum(n1: Int): Int = {
    1 + n1
  }

  def myException(): Nothing = {
    throw new Exception("发生了异常")
  }
}
